{{tag>Xenial nautilus}}

----

====== Les scripts pour Nautilus ======

Le gestionnaire de fichiers Nautilus permet d'exécuter des [[tutoriel:script_shell|scripts]], sous la forme de fichiers textes.
Les scripts sont de "petits" programmes permettant une multitude de fonctionnalités.

Les scripts suivants et d'autres trouvés sur le Web peuvent être copiés dans le répertoire de scripts de Nautilus. Certains s'exécutent avec les [[:sudo|privilèges utilisateur]] ce qui signifie que vous pouvez endommager gravement votre système. Agissez donc avec beaucoup de prudence quand le script vous demande le mot de passe pour modifier le système.
Beaucoup de scripts sont déjà présents dans les [[:depots|dépôts]] et peuvent être facilement installés par votre [[:gestionnaire_de_paquets|gestionnaire de paquets]]. Reportez-vous à la page de l'[[:nautilus_utilisation_avancee|utilisation avancée de nautilus]] pour voir la liste complète de ces scripts.

===== Installation =====
Pour commencer, il vous faudra [[:tutoriel:comment_installer_un_paquet|installer le paquet]] **[[apt>nautilus-scripts-manager]]**. Ce paquet gère le dossier de scripts de Nautilus se trouvant dans **~/.local/share/nautilus/scripts/** pour l'environnement de bureau GNOME. Vous pouvez également mettre des scripts valables pour tous les utilisateurs dans **/usr/share/nautilus-script**. \\
(Le répertoire **.local** est caché dans votre dossier personnel. Pour y accéder il faut préalablement afficher les fichiers cachés. Dans la barre des menus → Affichage → Afficher les fichiers cachés ou faites Ctrl + h).
Quand des scripts sont présents dans le dossier de scripts, il s'ouvre par clic-droit → Scripts → Ouvrir le dossier de scripts.
Tant qu'il n'y a pas de scripts dedans le raccourci n'est pas disponible.

Placez-y vos scripts et [[:permissions|rendez-les exécutables]] en faisant un clic droit sur le script en question → Propriétés → onglet Permissions → et cocher la case "Autoriser l’exécution du fichier comme un programme". Vous devriez nommer ces fichiers de façon à ce qu'ils évoquent quelque chose pour vous car c'est sous leurs noms qu'ils apparaîtront dans vos menus Nautilus. De plus vous n'avez pas besoin de rajouter l'extension **.sh** de scripts shell. Il est également possible de créer des dossiers pour mieux organiser les scripts.
 Vos scripts seront alors disponibles dans toutes les fenêtres Nautilus dans //Fichier // → Scripts, ainsi que dans le menu contextuel (clic droit). Vous ne verrez pas le menu //Fichier // tant que vous n'aurez pas ajouté votre premier script dans **~/.local/share/nautilus/scripts/**.

Le chemin des scripts pour :
  * Caja (Mate) est : **~/.config/caja/scripts**.
  * Nautilus (Gnome/Unity) est : **~/.local/share/nautilus/scripts**
  * Némo (Cinnamon) est : **~/.local/share/nemo/scripts/**

Voir aussi:
  * [[#Les pièges à éviter]],
  * [[#Exemples]].

===== Sélection de scripts =====

Vous avez déjà des scripts Nautilus sur la page [[:scripts utiles]].

Le script [[https://www.linux-apps.com/content/show.php/Script+Installer?content=67612|Script Installer]] permet d'installer automatiquement les scripts Nautilus.(dernière maj en 2008, il doit être obsolète ?).

==== Les scripts dans les dépôts Canonical ====

  * [[apt>nautilus-script-collection-svn|Collection de scripts pour Subversion]]
  * [[apt>nautilus-script-audio-convert|Conversion audio]]
  
==== Plusieurs scripts sélectionnés par un tiers ====

  * [[https://www.linux-apps.com/content/show.php/Nautilus+Scripts+Pack+Mini?content=85788|Nautilus Scripts Pack Mini]]
  * [[https://www.linux-apps.com/content/show.php/Nautilus+Scripts+Pack?content=90330|Nautilus Scripts Pack]]
  * [[https://www.linux-apps.com/content/show.php/NScripts?content=67655|NScripts]]
  * [[https://www.linux-apps.com/content/show.php/NScripts+Ultimate?content=68599|NScripts Ultimate]]
  * [[https://www.linux-apps.com/content/show.php/Ultimate+Edition+Nautilus+Scripts+Pack?content=104451|Ultimate Edition Nautilus Scripts Pack]]

==== Web ====

  * [[http://translate.google.com/translate?js=n&prev=_t&hl=fr&ie=UTF-8&layout=2&eotf=1&sl=en&tl=fr&u=http%3A%2F%2Fwww.omgubuntu.co.uk%2F2010%2F12%2Fshare-any-folder-on-the-web-in-10-seconds-using-ubuntu-and-one-script%2F|Script pour créer un serveur web a partir d'un répertoire]].

==== Conversion de fichier ====

  * [[https://www.linux-apps.com/content/show.php/Audio%2BVideo%2BImage%2BText%2BISO+Convert?content=92533|Audio/Video/Image/Text/ISO Convert]] (nécessite au [[apt>xterm,zenity,ffmpeg,imagemagick,amrwb,faac,faad2,ffmpeg-libs,gpac,gstreamer-ffmpeg,gstreamer-plugins-*,xmms2-avcodec,xmms2-,wma|moins ça]], ou [[apt>xterm,zenity,ffmpeg,imagemagick,amrwb,faac,faad2,ffmpeg-libs,gpac,gstreamer-ffmpeg,gstreamer-plugins-*,xmms2-avcodec,xmms2-,wma,curl,links,kdegraphics,espeak,faac,faad2,antiword,unrtf,odt2txt,txt2tags,libavcodec-unstripped-52,AcetoneISO,nrg2iso,daa2iso,cdd2iso,uif|tout ça]]).
  * [[https://www.linux-apps.com/content/show.php/avi+%26+mp4+converter?content=64899|avi & mp4 convertisseur.]]
  * [[https://www.linux-apps.com/content/show.php/PDF+to+PNG?content=83110|PDF to PNG]]
  * [[:pdftohtml|pdf to html]]
  * [[timidity#script pour convertir un fichier midi vers un fichier audio|Convertir un fichier MIDI vers un fichier audio]] (nécessite [[timidity|TiMiDiTy]])

==== Image ====

  * [[https://www.linux-apps.com/content/show.php/Resize+Image?content=110541|Changer la taille des images.]] Resize Image
  * Ajouter "Redimensionner les images..." dans le menu contextuel des images. [[:tutoriel:comment_installer_un_paquet|Installez le paquet]] **[[apt>nautilus-image-converter]]** puis redémarrer la session.

==== Audio ====

  * [[https://www.linux-apps.com/content/show.php/Enqueue+in+Audacious?content=80429|Enqueue in Audacious]]
  * [[https://www.linux-apps.com/content/show.php/Extract+Audio?content=83072|Extraire l'audio de tout fichier multimedia]].
  * [[timidity#script pour convertir un fichier midi vers un fichier audio|Convertir un fichier MIDI vers un fichier audio]] (nécessite [[timidity|TiMiDiTy]])

==== Gestion des fichiers ====

  * [[https://www.linux-apps.com/content/show.php/Send+to...?content=67627|Envoyer vers - Send to...]]
  * [[https://www.linux-apps.com/content/show.php/Encrypt%2BDecrypt+Files?content=74653|Encrypter/Decrypter les fichiers]] (nécessite gpg)
  * [[https://www.linux-apps.com/content/show.php/Remove+Spaces?content=76200|Retirer les espaces des fichiers et dossiers (et les remplacer par underscore).Remove Spaces.]]
  * [[http://g-scripts.sourceforge.net/nautilus-scripts/File%20System%20Management/envoiftp|Envoie de fichier par ftp]].
  * [[http://g-scripts.sourceforge.net/nautilus-scripts/File%20Processing/Misc/send_file_%20as_email_attachment_-_Thunderbird|Envoyer les fichiers en pièce-jointe de thunderbird]]
  * [[http://soft.freem2.fr/2010/05/21/envoyer-des-fichiers-avec-thunderbird/|Envoyer les fichiers en pièce-jointe de thunderbird(amélioré)]] -lien mort-
  * [[:dossiers_et_fichiers_caches#script_automatique|Masquer/afficher des fichiers]]

==== Administration ====

  * [[https://www.linux-apps.com/content/show.php/Open+As+Root%28Working%29?content=76932|Ouvrir en tant que Root]]
  * [[https://www.linux-apps.com/content/show.php/Make+MD5+sums?content=69749|Vérifier le MD5]].
  * [[https://www.linux-apps.com/content/show.php/Make%2BCheck+SFV?content=68362|Vérifier avec le SFV]].
  * [[https://www.linux-apps.com/content/show.php/Renamer?content=87601|Renommer les fichiers.]] Renamer.
  * [[https://www.linux-apps.com/content/show.php/Terminal+Here?content=73250|Ouvrir un Terminal ici (répertoire actuel).Terminal Here.]]
  * [[https://www.linux-apps.com/content/show.php/Open+Nautilus+as+Root?content=73610|Ouvrir Nautilus en root.]]
  * [[https://www.linux-apps.com/content/show.php/Remove+~.~%2C.bak.old.OLD.BAK_curr_directo?content=73733|Nettoyer les ~.~,.bak.old.OLD.BAK_curr_directo]]

==== Développement ====

  * [[https://www.linux-apps.com/content/show.php/Make+DEB+Package?content=79785|Faire un fichier deb]] ( plus facilement ).
  * [[https://www.linux-apps.com/content/show.php/dot-tree?content=105395|Visualisation des dossiers en arbre.]] dot-tree
  * [[http://www.schnuckelig.eu/story/resurection-nautilus-cvs-scripts|Le CVS depuis Nautilus - Nautilus CVS scripts]] 

==== Internet ====

  * [[https://www.linux-apps.com/content/show.php/sendToImageshack?content=100952|Envoyer sur imageshack]].
  * [[http://forum.ubuntu-fr.org/viewtopic.php?pid=1424293#33|Envoyer sur dl.free.fr]] 
  * [[http://www.xorax.info/blog/news/200-script-dl-free-fr-automatique.html|script automatique pour télécharger sur dl.free.fr]]
  * [[http://blog.anandkapre.com/2009/ubuntu/08-19-ubuntu-linux-rapidshare-right-click-uploader/|Rapidshare Multiple Uploader.]] ( [[http://www.ubuntu-inside.me/2009/08/one-click-multi-rapidshare-uploader.html|mirroir 1]], [[http://ubuntuforums.org/archive/index.php/t-974303.html|miroir 2]])
  * [[http://forum.ubuntu-fr.org/viewtopic.php?id=384599|Upload sur Megaupload (site fermé)]]

==== Divers ====

  * [[https://www.linux-apps.com/content/show.php/Simple+alarm?content=111811|Lancer une Alarme à une heure donnée]] aussi [[http://forum.ubuntu-fr.org/viewtopic.php?pid=6755501#p6755501|ici]],
  * [[http://gnome-look.org/content/show.php/Nautilus+Extension+Kill+Thumbs?content=92143|Supprimer automatiquement les fichiers Thumbs.db de vos répertoires]],
  * [[https://www.linux-apps.com/content/show.php/Automated+Font+Installer?content=67610|Installation de police]],
  * [[https://www.linux-apps.com/content/show.php/TTF+Font+Manager?content=82473|TTF Font Manager]],
  * [[https://www.linux-apps.com/content/show.php/download_opensubtitle?content=68085|Télécharger les sous-titres sur download_opensubtitle]].


===== Les pièges à éviter =====

La première chose qu'un **script Nautilus** doit récupérer, c'est la liste des fichiers sur lesquels il doit opérer (les fichiers qui étaient sélectionnés par l'utilisateur lorsqu'il a lancé le script). Comme pour tout script, il faut pour cela rédiger correctement le script et éviter certaines erreurs.

==== Attention en utilisant les arguments passés aux scripts  ====

**Nautilus** passe en argument les noms des fichiers sélectionnés. Par exemple, si vous êtes dans **/home/user**, et que vous appliquez le script sur **toto** et **titi**, $PWD et $NAUTILUS_SCRIPT_CURRENT_URI vaudront '/home/user', $1 vaudra 'toto' et $2 vaudra 'titi'.

Premier problème, **Nautilus** offre une vue liste (qui pourrait d'ailleurs se nommer "arborescente"), on peut donc sélectionner des fichiers qui sont dans des sous-répertoires du répertoire courant.

Il **faut donc éviter** utiliser des scripts du genre :

<code bash>
for arg
do
  do_something "$arg"
done
</code>

ou

<code bash>
for arg in "$@"
do
  do_something "$arg"
done
</code>

Ces scripts ne marcheraient pas dans tous les cas. Normalement, ce problème est corrigé dans Gnome 2.23 (Ubuntu ≥ 8.10).

Mais, même une fois corrigé, la méthode suivante devrait poser moins de problèmes (car on obtient directement la liste des chemins complets des fichiers).

Heureusement, **Nautilus** fournit une variable ''$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS'', qui contient la liste des chemins complets des fichiers sélectionnés, séparés par '\n' (retour à la ligne).
C'est donc cette variable qu'il faut utiliser. Par exemple :
<code bash>
#!/bin/bash

function faireQqChose () {
	zenity --info --text "le fichier est $@"
}

IFS=$'\n' # on limite le IFS aux sauts de ligne
faireQqChose $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS

exit 0
</code>

<note help>
Dans certains cas, les chemins peuvent être séparés par une espace et pas par un retour à la ligne.
Si un lecteur a des précisions, merci de contacter la [[:wiki:liste_discussion|liste de discussion de la documentation]].
</note>

==== Itérer sur les fichiers ====
Le problème, c'est que des fichiers peuvent contenir des espaces, et aussi des \n (un '\' suivi d'un 'n'), et que certaines solutions ne sont pas correctes à cause de ces cas particuliers.

Par exemple :

<code bash>
for arg in "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
do
  do_something "$arg"
done
</code>

**n'est pas correct**, car si les chemins sont '/tmp/a b/c' et '/tmp/d e', la boucle fera 4 itérations : '/tmp/a', 'b/c', '/tmp/d' et 'e'.

Une première solution est de faire :

<code bash>
printf %s "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" |
while read -r arg
do
  do_something "$arg"
done
</code>

Il ne faut pas utiliser **echo** (en **sh**, il ne fonctionnerait pas sur un fichier contenant un '\' suivi d'un 'n'), et il faut bien passer l'argument **-r** à **read** (même raison).

Une seconde solution est de changer l'[[wp>Input_Field_Separators|IFS]] :

<code bash>
IFS='
'
for arg in "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
do
  do_something "$arg"
done
</code>

Ainsi, chaque argument sera une ligne de $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS.

On peut aussi vouloir passer tous les arguments à un autre script (sans itérer) :

<code bash>
IFS='
'
do_something "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
</code>

Si vous respectez ceci, votre script fonctionnera aussi bien en **/bin/bash** qu'en **/bin/sh** (du moins pour cette partie) et pour tous les fichiers, mêmes les cas particuliers.

Après divers test voici une solution qui fonctionne même si le nom de fichier ou dossier contient des espaces, virgules ou autres caractères spéciaux :
utiliser la commande **find** !
par exemple pour une opération sur des fichiers mp3 :

<code bash>
#!/bin/bash
IFS='
'
printf %s "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" |
while read -r arg
do
	find "$arg" -depth -iname "*.mp3" -exec votre_commande {} \;
done
</code>

Le *.mp3 va prendre en compte les fichier mp3 contenus dans votre sélection et le {} remplace le nom de fichier dans votre commande à appliquer sur les mp3.

===== Exemples =====

==== Supprimer les fichiers de sauvegarde de Gedit ====
Gedit copie chaque fichier avant la sauvegarde sous le nom « $fichier~ ». Il suffira d'appliquer le script d'un //clic droit -> Scripts -> rm-backups.sh// :

<code bash>
#! /bin/bash

rm ./*~
zenity --info --text="Fichiers de backup *~ supprimés :)"
</code>

<note tip> On peut désactiver la création de fichier de sauvegarde par Gedit en décochant la case "Créer une copie de sauvegarde des fichiers avant l’enregistrement" dans **Édition -> Préférences -> Éditeur**.</note>

==== Ouvrir en tant qu'administrateur ====

=== Éditer un fichier avec VIM avec les privilèges ROOT ===
<note warning>**Extrêmement risqué, ne jouez pas avec**</note>
<code bash>
#!/bin/bash
# C'est sérieux il ne faut pas en abuser
notify-send "si vous ne savez pas ce que vous faites, fermez la fenêtre"
pkexec --user root vim "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
</code>

=== Ouvrir Nautilus dans le répertoire choisi avec les privilèges « root » ===
<note warning>Cela ne doit en réalité jamais arriver</note>

==== Ouvrir un terminal ici ====
**Nautilus Open Terminal** permet d'ouvrir un terminal directement dans le répertoire courant de Nautilus //via// un clic droit → //Ouvrir dans un terminal//.

Pour l'utiliser, il suffit d'[[:tutoriel:comment_installer_un_paquet|installer le paquet]] **[[apt>nautilus-open-terminal]]** et ensuite de redémarrer la session.

==== Lire les fichiers du répertoire avec Rhythmbox ====
Permet d'envoyer tous les fichiers du répertoire dans la liste de lecture de [[:Rhythmbox]] :

<code bash>
#!/bin/sh
base="$(echo $NAUTILUS_SCRIPT_CURRENT_URI | cut -d'/' -f3- | sed 's/%20/ /g')"

if [ -z "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ]; then
   dir="$base"
else
   while [ ! -z "$1" -a ! -d "$base/$1" ]; do shift; done
   dir="$base/$1"
fi

if [ "$NAUTILUS_SCRIPT_CURRENT_URI" == "x-nautilus-desktop:///" ]; then
dir="Desktop"
fi

if [ "$NAUTILUS_SCRIPT_CURRENT_URI" == "trash:" ]; then
dir="$HOME/.Trash"
fi

if [ "$NAUTILUS_SCRIPT_CURRENT_URI" == "file:///" ]; then
dir="/"
fi

FIRST_URI="`echo -n $NAUTILUS_SCRIPT_SELECTED_URIS`"
if [ "$FIRST_URI" == "x-nautilus-desktop:///home" ]; then
dir="$HOME"
fi

if [ "$FIRST_URI" == "x-nautilus-desktop:///computer" ]; then
dir="/"
fi
rhythmbox "$dir"
</code>

==== Envoyer par mail des images compressées petites avec Thunderbird ====

<code bash>
#!/bin/sh
IFS='
'
notify-send "Patientez..."
# astuce pour prendre en compte les espaces des dossiers et fichiers
printf %s "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" |
emailattachment="" # initialisation de la variable à cause du for
for fullfile in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
    filename="${fullfile##*/}" # isoler le nom de la photo
    convert "$filename" -resize 640 -quality 60% /tmp/"$filename" # compression de la photo
    emailattachment="$emailattachment/tmp/$filename," # collecte des photos
    sleep 500ms
done
fichiersjoints=${emailattachment%?} # enlever la virgule à la fin
thunderbird -compose attachment="'$fichiersjoints'" # créer l'email avec les photos jointes

exit 0
</code>

=====Voir aussi=====
  * [[http://askubuntu.com/questions/281062/how-to-get-nautilus-scripts-working-on-ubuntu-13-04|Question concernant les scripts Nautilus]],
  * [[https://wiki.ubuntu.com/NautilusScriptsHowto|traduction]]
  * [[https://www.linux-apps.com/browse/cat/126/order/latest|Scripts pour Nautilus sur gtk-apps.org]]
  * [[http://g-scripts.sourceforge.net/|Site officiel de nautilus script, avec quelques scripts]] 
----

//Contributeurs : [[utilisateurs:FredB]], [[utilisateurs:l_africain|L'Africain]]  [[utilisateurs:Fabien26]] (1<sup>re</sup> actualisation), [[:utilisateurs:ner0lph|Floriang]].//